/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import Controlador.Conection;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author ceballos
 */
public class ClsBuscarHotel implements Serializable {

    private Conection conn;

    /**
     *
     * @param nombre
     * @param ciudad
     * @param tipo
     * @param precio
     * @return
     */
    public List buscar(String nombre, String ciudad, String tipo, String precio) {
        List resp = new ArrayList();
        List aux = new ArrayList();
        if (nombre != null && !"".equals(nombre)) {
            resp.addAll(buscar_x_nombre(nombre));
        }
        if (ciudad != null && !"".equals(ciudad)) {
            aux = buscar_x_ciudad(ciudad);
            elim_repetidos(resp, aux);
            resp.addAll(aux);
        }
        if (tipo != null && !"".equals(tipo)) {
            aux = buscar_x_tipo(tipo);
            elim_repetidos(resp, aux);
            resp.addAll(aux);
        }
        if (precio != null && !"".equals(precio)) {
            aux = buscar_x_precio(precio);
            elim_repetidos(resp, aux);
            resp.addAll(aux);
        }
        return resp;
    }

    /**
     *
     * @param nombre
     * @return
     */
    public List buscar_x_nombre(String nombre) {
        String query = "SELECT * "
                + "FROM tblHostals "
                + "WHERE UPPER(name_hostal)=UPPER('" + nombre + "')";
        conn = new Conection();
        ResultSet consultar = conn.consultar(query);
        return Rs_A_Lista(consultar);
    }

    /**
     *
     * @param ciudad
     * @return
     */
    public List buscar_x_ciudad(String ciudad) {
        String query = "SELECT * "
                + "FROM tblHostals "
                + "WHERE UPPER(city_hostal)=UPPER('" + ciudad + "')";
        conn = new Conection();
        ResultSet consultar = conn.consultar(query);
        return Rs_A_Lista(consultar);
    }

    /**
     *
     * @param tipo
     * @return
     */
    public List buscar_x_tipo(String tipo) {
        String query = "SELECT * "
                + "FROM tblHostals h "
                + "INNER JOIN tblrooms r "
                + "ON r.hostal_id=h.hostal_id "
                + "INNER JOIN tblroom_types rt "
                + "ON rt.room_type_code=r.room_type_code "
                + "AND UPPER(rt.room_type_desc)=UPPER('" + tipo + "')";
        conn = new Conection();
        ResultSet consultar = conn.consultar(query);
        return Rs_A_Lista(consultar);
    }

    /**
     *
     * @param precio
     * @return
     */
    public List buscar_x_precio(String precio) {
        String query = "SELECT * "
                + "FROM tblHostals h "
                + "INNER JOIN tblrooms r "
                + "ON r.hostal_id=h.hostal_id "
                + "INNER JOIN tblroom_types rt "
                + "ON rt.room_type_code=r.room_type_code "
                + "AND rt.room_standar_rate=" + precio;
        conn = new Conection();
        ResultSet consultar = conn.consultar(query);
        return Rs_A_Lista(consultar);
    }

    private List Rs_A_Lista(ResultSet rs) {
        List<List<String>> lrs = new ArrayList<>();
        try {
            rs.beforeFirst();
            while (rs.next()) {
                List<String> aux = new ArrayList<>();
                aux.add("" + rs.getInt(1));
                aux.add(rs.getString(2));
                aux.add("" + rs.getInt(3));
                aux.add(rs.getString(4));
                aux.add(rs.getString(5));
                aux.add(rs.getString(6));
                lrs.add(aux);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ClsBuscarHotel.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lrs;
    }

    /**
     *
     * @param l1
     * @param l2
     */
    public void elim_repetidos(List l1, List l2) {
        l1.removeAll(l2);
    }

    public StringBuffer reporteHTML(List l) {
        StringBuffer reporte = new StringBuffer();
        if (l.size() <= 0) {
            reporte.append("<h1>NO se encontraron concidencias</h1>");
        } else {
            String aux = "<table>"
                    + "<thead>"
                    + " <tr>"
                    + "     <td>"
                    + "         COINCIDENCIAS"
                    + "     </td>"
                    + " </tr>"
                    + "</thead>"
                    + "<tfoot>"
                    + " <tr>"
                    + "     <td>"
                    + "         total registros: " + l.size() + ""
                    + "     </td>"
                    + " </tr>"
                    + "</tfoot>"
                    + "<tbody>";
            reporte.append(aux);
            int i = 0;
            while (i < l.size()) {
                aux = "<tr>";
                List<String> reg = (List<String>) l.get(i);
                int j = 0;
                while (j < reg.size()) {
                    aux += "<td>";
                    aux += "" + reg.get(j);
                    aux += "</td>";
                    j++;
                }
                aux += "</tr>";
                reporte.append(aux);
                i++;
            }
        }
        return reporte;
    }
}
